#tell方法：获取当前文件读写的位置
f=open('address.txt', 'r',encoding='utf-8')
f.tell()
#默认读取的位置是0，也就是文件的开头
print(f.tell()) # 0

f.read(5)
print(f.tell()) # 5
f.close()

#seek方法：设置文件读写的位置
#语法格式:文件对象.seek(offset, whence)
#offset:表示偏移量，正数表示向后偏移，负数表示向前偏移
#whence:表示偏移的起始位置，0表示文件开头，1表示当前位置，2表示文件末尾
f=open('address.txt', 'r',encoding='utf-8')
print(f.tell())
f.seek(5,0)
print(f.tell()) # 5
print(f.read(5)) #读取5个字节

#如果whence=1，表示从当前位置开始偏移
# f.seek(5,1)
# print(f.tell()) # 10
#但是会报错，io.UnsupportedOperation: can't do nonzero cur-relative seeks
#不能够读取r模式下的文件

#改成二进制文件
f=open('address.txt', 'rb')
print(f.tell()) # 0
f.read(5)  # 先读取5个字节
print(f.tell())  # 5
f.seek(5,1)
print(f.tell()) # 10
print(f.read(5)) #读取5个字节
#结果b'lifei' b是指二进制文件

#如果whence=2，表示从文件末尾开始偏移
f.seek(-5,2)
print(f.tell()) # 15
print(f.read(5)) #读取5个字节

#注意：当whence=1或者2时候，打开文件必须是二进制模式，否则会报错

#seek方法的返回值是偏移量
#比如
print(f.seek(5,0)) #表示从文件开头开始偏移5个字节


